/* ***************************
 * jQuery: 不用插件实现任意列表或表格的排序
 * @Author 王君富
 * ****************************/

/**
 * 监听表格表头点击
 */
$(document).on('click', 'th', function () {
    var table = $(this).parents('table').eq(0);
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));

    if (table.find('tr[pid]').toArray().length > 0) {
        rows = table.find($("[pid]")).toArray().sort(comparer($(this).index()));
        var cidrows = table.find($("[cid]")).toArray();
        this.asc = !this.asc;
        if (!this.asc) {
            rows = rows.reverse();
            $(this).find('span').attr("order", "desc");
        } else {
            $(this).find('span').attr("order", "asc");
        }
        table.children('tbody').empty().html(rows);
        table.children('tbody').append(cidrows);
        table.find('tr[cid]').each(function () {
            table.find($("[pid='" + $(this).attr('cid') + "']")).after($(this));
        });
        reg_button_toggle();
    } else {
        this.asc = !this.asc;
        if (!this.asc) {
            rows = rows.reverse();
            $(this).find('span').attr("order", "desc");
        } else {
            $(this).find('span').attr("order", "asc");
        }
        table.children('tbody').empty().html(rows);
    }
});

/**
 * 排序
 * @param index
 * @returns {Function}
 */
function comparer(index) {
    return function (a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index);

        // 千分位数据处理
        // 注意：会忽略掉所有逗号，可能会引发bug！
        var x = valA.toString();
        valA = x.replace(new RegExp(",", "gm"), "");
        var y = valB.toString();
        valB = y.replace(new RegExp(",", "gm"), "");

        return $.isNumeric(valA) && $.isNumeric(valB) ?
            valA - valB : valA.localeCompare(valB);
    };
}

/**
 * 获取第index列的值
 * @param row
 * @param index
 * @returns {jQuery}
 */
function getCellValue(row, index) {
    return $(row).children('td').eq(index).text();
}

/**
 * 为可折叠表格注册折叠方法
 */
function reg_button_toggle() {
    $("#table-fund a[usetype='open']").unbind('click').bind('click', function () {

        if ($(this).attr("openstate") == "close") {
            $(this).attr("openstate", "open");
            $(this).html("收起");
        } else if ($(this).attr("openstate") == "open") {
            $(this).attr("openstate", "close");
            $(this).html("展开");
        }

        var t = $(this).parents("tr");
        var id = t.attr("pid");

        // 设置样式
        var table = $(this).parents('table').eq(0);
        table.find("tr[cid=" + id + "]").css("background-color", "#7266ba"); //#00aced #5d9cec
        table.find("tr[cid=" + id + "]").children().css("color", "#fff");

        // 展开/关闭表格
        t.nextAll("tr[cid=" + id + "]").toggle();
    });
}